package reflect;

import java.lang.reflect.Method;
import java.lang.reflect.Modifier;

/**
 * 自动调用Person类中所有本类定义的公开的方法名含字母"a"的无参数方法.
 * 思路:
 * 1:获取Person本类定义的所有方法
 * 2:如果该方法的参数个数为0则使用invoke执行该方法
 *   注:Method提供了一个方法:
 *   int getParameterCount()
 *   方法返回的int值表示该方法的参数个数.
 */
public class Test1 {
    public static void main(String[] args) {
        try {
            Class c = Class.forName("reflect.Person");
            Object p = c.newInstance();

            Method[] methods = c.getDeclaredMethods();
            for(Method m : methods){
                if(m.getParameterCount() == 0 &&
                        m.getModifiers() == Modifier.PUBLIC &&
                        m.getName().contains("a")
                ){
//                        m.setAccessible(true);
                        System.out.println("方法名"+m.getName());
                        m.invoke(p);

                }
            }


        } catch (Exception e) {
            e.printStackTrace();
        }
    }
}
